package br.com.AC.bean;

import java.sql.Time;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import br.com.AC.entidades.Agenda_med;
import br.com.AC.entidades.Consulta;
import br.com.AC.entidades.ListaConsulta;
import br.com.AC.entidades.Medico;
import br.com.AC.entidades.Usuario;
import br.com.AC.mail.IndexController;
import br.com.AC.modelo.ConsultaModel;
import br.com.AC.modelo.LoginModel;
import br.com.AC.modelo.MedicoModel;
import br.com.AC.modelo.PacienteModel;

public class ConsultaBean {

	private String tPesquisa = "E";
	
	private String tEspecialidade;
	
	private String tClinica;
	
	private int tMedico;
	
	private String tNomeMedico;
	
	private String tNomePaciente;
	
	private List<Medico> tListaMedico;
	
	private List<Usuario> tListaPaciente;
	
	private int tPaciente;
	
    private ArrayList listaUsuario;  
  
	private Date tDtFolga;

    //dados da consulta
    
    private String tConsulta;
    
    private int tcodPaciente;
    
    private String tData;
    
    private List<Medico> listaMedico;
    
    private Medico selectedMed;
    
    private List<Integer> tDiasSemana;
    
    private List<Integer> tPeriodo;
    
    List<String> diasPeriodos;
    
    List<Integer> diasSemAtendidos;
    
    private ListaConsulta selectedCons;
    
    //dados da consulta
    List<Consulta> consultasLivres = new ArrayList();
    List<ListaConsulta> listaDesmCon = new ArrayList();
    List<Consulta> histConsultaPac = new ArrayList(); 
    
    private String tTime;
    private String tDate;
    private int tCrm;
    
	Usuario u = new Usuario();
	Consulta c = new Consulta();
	MedicoModel mm = new MedicoModel();
    PacienteModel pm = new PacienteModel();
    ConsultaModel cm = new ConsultaModel();
    LoginModel lm = new LoginModel();
    IndexController ic = new IndexController();
    ConsultaModel consultaModel = new ConsultaModel();
    
    List<Usuario> retornoUsu;
    Usuario porra;
    
    public String voltarDesmCons() {  
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
    	
    	listaDesmCon = new ArrayList<ListaConsulta>();
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	String dtAtu = sdf.format(gettDtFolga());
    	listaDesmCon = montarListaTela(mm.listaConsMarcadas(id, dtAtu));
    	
    	return "voltarDesmCons";  
    }
    
    public String voltarDesmConsP() {  
    	return "voltarDesmConsP";  
    }
    
    public String incAgenConsult() {  
    	return "incAgenConsult";  
    }  
    
    public String incConsult() {
//    	listaPacConsulta();
    	listaConsultasMed2();
    	return "incConsult";  
    }  
    
    public void listaPacConsulta() {
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
    	
		tListaPaciente = new ArrayList<Usuario>();
    	tListaPaciente = pm.listaPaciente(id);
    }  
    
    
    public ConsultaBean() {  
    	//listaUsuario = new ArrayList<Consulta>();  
    	//retornoUsu = new ArrayList<Usuario>();
    	//teste();
    	tListaMedico = new ArrayList<Medico>();
    	tListaMedico =  mm.buscarMedicosCad();
    }  
    
    public String marcarConsulta() throws ParseException
    {
    	System.out.println("consulta marcada");
    	
    	MedicoModel mm = new MedicoModel();
    	Medico medico = new Medico();
    	
    	//medico = mm.procuraMedicoCrm(selectedCons.get);
    	
    	settNomeMedico(selectedCons.getMedico());

    	return "marcarConsulta";
    }
    
    public String desmarcarConsu() throws ParseException
    {
    	System.out.println("Desmarcar Consulta");
    	
    	settNomeMedico(selectedCons.getMedico());
    	settClinica(selectedCons.getClinica());
    	return "desmarcarConsu";
    }
    
    public String desmarcarConsuMed() throws ParseException
    {
    	System.out.println("Desmarcar Consulta Medico");
    	String nome = pm.pesqUsu(selectedCons.getPaciente());
    	
    	settNomePaciente(nome);

    	return "desmarcarConsuMed";
    	
    }
    
    public String histConsultPac() throws ParseException
    {
    	System.out.println("Consulta Historico Paciente");
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
    	histConsultaPac = new ArrayList<Consulta>();
    	histConsultaPac =  mm.histConsultPac(selectedCons.getPaciente(), mm.procuraMedico(id).getCrm());
    	listaDesmCon = montarListaTela(histConsultaPac);
    	setTcodPaciente(histConsultaPac.get(0).getPaciente_Usuario_id_usuario());
    	return "histConsultPac";
    	
    }
    
    public String deletaConsuMed() throws ParseException
    {
    	System.out.println("Desmarcar Consulta Medico");
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
    	
    	this.settCrm(mm.procuraMedico(id).getCrm());
    	this.settDate(sdf1.format(gettDtFolga()));
    	this.settTime(selectedCons.getHora());
    	
    	if(consultaModel.desmarcarConsultaMed(gettCrm(), gettTime(), gettDate()))
    	{
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Desagendado", "Consulta desagendada com sucesso."));
			return "";
    	}
    	else 	
    	{
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_WARN,"Aten�‹o","Favor tentar novamente."));
    		return "";
    	}
    }
    
    public String listaConsultas()
    {
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
    	
    	listaDesmCon = new ArrayList<ListaConsulta>();
    	
    	listaDesmCon = montarListaTela(pm.listaConsultas(id));
    	
    	return "listaConsultas";
    }

    public String listaConsultasMed()
    {
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
    	
    	listaDesmCon = new ArrayList<ListaConsulta>();
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    	String dtAtu = sdf.format(gettDtFolga());
    	listaDesmCon = montarListaTela(mm.listaConsMarcadas(id, dtAtu));
    	
    	return "desmConsultMed";
    }

    public void listaConsultasMed2()
    {
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
    	
    	listaDesmCon = new ArrayList<ListaConsulta>();
    	Date data = new Date();
		
		SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd");
        String date = sdf1.format(data);
    	listaDesmCon = montarListaTela(mm.listaConsMarcadas(id, date));
    	
    }

    public String validarOpcoes()
    {
    	if(tEspecialidade.contains("Selecione"))
    	{
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Aten�‹o", "Favor selecionar a Especialidade."));
			return "";
    	}
    	else if(tClinica == "")	
    	{
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Aten�‹o","Favor selecionar a Clinica."));
    		return "";
    	}
    	else if(tDiasSemana.isEmpty())
    	{
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Aten�‹o", "Favor selecionar pelo menos um dia da semana."));
    		return "";
    	}
    	else if(tPeriodo.isEmpty())
    	{
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Aten�‹o", "Favor selecionar pelo menos um periodo."));
    		return "";
    	}
    	return "ok";
    }
    
//    public List<Consulta> pesquisar()
    public void pesquisar() throws ParseException
    {
    	if(validarOpcoes().equalsIgnoreCase("ok"))
    	{
    		
    	System.out.println("Especialidade: "+tEspecialidade+"  Clinica: "+tClinica+"   Medico: "+tMedico);
    	System.out.println("Dias da Semana: " + tDiasSemana  +"   PEriodo: " + tPeriodo);
    	
    	//CRIAR metodo para verificar se os itens estao selecionados
    	
    	List<Integer> dias = incrementaDias(tDiasSemana);
    	List<Integer> periodo= incrementaPeriodo(tPeriodo);
    	
    	
    	List<Agenda_med> verificarDiasHora= consultaModel.verificarDiasHora(tEspecialidade, tClinica,tMedico, dias, periodo);
    	
    	
    	if(verificarDiasHora != null && !verificarDiasHora.isEmpty())
    	{
//    	verificarPeriodos(verificarDiasHora);
    	
	    	verificaPeriodos(verificarDiasHora);
	    	
	    //	retornaVagas(diasPeriodos,verificarDiasHora.get(0).getMedico_crm());
	    	
	    	
	    	ArrayList<Consulta> vagasOcupadasDois = new ArrayList<Consulta>();
	    	consultasLivres = new ArrayList();
	    	for(int g =0 ; g< verificarDiasHora.size(); g++)
	    	{
	    		List<Consulta> vagasOcupadas = (retornaVagas(diasPeriodos,verificarDiasHora.get(g).getMedico_crm()));
//	    		vagasOcupadas.
	    		for(int t =0 ; t<vagasOcupadas.size(); t++)
	    		{
	    			vagasOcupadasDois.add(vagasOcupadas.get(t));
	    		}
	    	}
	    	
	    	
	    	List<ListaConsulta> listaTela = montarListaTela(vagasOcupadasDois);
	    	List<ListaConsulta> listaTelaFree = montarListaTela(consultasLivres);
	    	
	    	listaUsuario = (ArrayList) listaTelaFree;
	    	
	    	//carregaUsuLista(retornoUsu);
	    	//return listaUsuario;
    	}
    	else
    	{
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Atenção", "Médico não atende no(s) dia(s) e horário(s) selecionado(s)."));
    		
    	}
    	}
    }
    
    public List<ListaConsulta> montarListaTela(List<Consulta> listaNaoFormat)
    {
    	List<ListaConsulta> listaFormatada = new ArrayList<ListaConsulta>();
    	
    	
    	SimpleDateFormat sdf = new SimpleDateFormat("dd-MM-yyyy"); 
    	SimpleDateFormat sdh = new SimpleDateFormat("HH:mm");     
    	GregorianCalendar gc = new GregorianCalendar();
    	Medico medico = new Medico();
		Usuario usu = new Usuario();
    	
    	for(int x = 0; x<listaNaoFormat.size(); x++)
    	{
    		ListaConsulta listaCerta = new  ListaConsulta();
    		gc.setTime(listaNaoFormat.get(x).getDtConsult());
    		int diaSemanaDt = gc.get(Calendar.DAY_OF_WEEK);
    		String diaSemanaStr = verificarDiaSemana(diaSemanaDt);
    		listaCerta.setPaciente(listaNaoFormat.get(x).getPaciente_Usuario_id_usuario());
    		listaCerta.setData(sdf.format(listaNaoFormat.get(x).getDtConsult()));
    		listaCerta.setDiaSemana(diaSemanaStr);
    		listaCerta.setHora(sdh.format(listaNaoFormat.get(x).getHora()));
    		listaCerta.setDados(listaNaoFormat.get(x).getDadosConsult());
    		if(listaNaoFormat.get(x).getPaciente_Usuario_id_usuario() != 0)
    				listaCerta.setNomePac(pm.pesqUsu(listaNaoFormat.get(x).getPaciente_Usuario_id_usuario()));
    		if(listaNaoFormat.get(x).getMedico_crm() != 0)
    		{
    			medico = mm.procuraMedicoCrm(listaNaoFormat.get(x).getMedico_crm());
    			usu = lm.cadastrado2(medico.getUsuario_id_usuario());
    			listaCerta.setMedico(usu.getNome());
    			listaCerta.setClinica(medico.getNome());
    			listaCerta.setCrm(listaNaoFormat.get(x).getMedico_crm());
    		}
    		
    		listaFormatada.add(listaCerta);
    	}
    	return listaFormatada;
    }
    
    public List<Consulta> retornaVagas(List<String>periodos, int medicoCrm) throws ParseException
    {
    	ArrayList vagasAb = new ArrayList();
    	List<Consulta> vagasOcupadas = new ArrayList();
    	List<Consulta> vagasOcupadasEdit = new ArrayList();
    	List<Consulta> consultasMarcadas = new ArrayList();
    	
    	List<Consulta> vagas = new ArrayList<Consulta>();
    	Consulta  consulta = new Consulta();
    	
    	SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); 
    	SimpleDateFormat sdh = new SimpleDateFormat("HH:mm:ss"); 
    	GregorianCalendar gc = new GregorianCalendar();
    	DateFormat sd = DateFormat.getDateInstance(DateFormat.MEDIUM);
    	
    	int horas = 0;
    	Time varTime = new Time(1);
    	
    	Date dtAtual = new Date();
    	Date dtFim = new Date();
    	Date auxData = new Date();
    	gc.setTime(dtAtual);
    	
    	dtFim.setDate(dtAtual.getDate()+30);
    	
    	gc.add(Calendar.DAY_OF_MONTH, 30);
    	for(int i =0; i<periodos.size();i++)
		{
			if(!periodos.get(i).isEmpty())
			{
				String periodoConsultado = montaPeriodo(periodos.get(i));
				
				switch (i) 
				{
					case 0:
						 vagas = consultaModel.vagasDisponiveis(medicoCrm, 2, periodoConsultado, sdf.format(dtAtual), sdf.format(dtFim));
						break;
					case 1:
						 vagas = consultaModel.vagasDisponiveis(medicoCrm, 3, periodoConsultado, sdf.format(dtAtual), sdf.format(dtFim));
						break;
					case 2:
						 vagas = consultaModel.vagasDisponiveis(medicoCrm, 4, periodoConsultado, sdf.format(dtAtual), sdf.format(dtFim));
						break;
					case 3:
						 vagas = consultaModel.vagasDisponiveis(medicoCrm, 5, periodoConsultado, sdf.format(dtAtual), sdf.format(dtFim));
						break;
					case 4:
						 vagas = consultaModel.vagasDisponiveis(medicoCrm, 6, periodoConsultado, sdf.format(dtAtual), sdf.format(dtFim));
						break;
					case 5:
						 vagas = consultaModel.vagasDisponiveis(medicoCrm, 7, periodoConsultado, sdf.format(dtAtual), sdf.format(dtFim));
						break;
						
				}
				for(int x = 0; x<vagas.size(); x++ )
				{
					vagasOcupadas.add(vagas.get(x));
				}
			}
		}
    	
    	vagasOcupadasEdit.addAll(vagasOcupadas);
    	for(int dias=0; dias<30;dias++)
    	{
    			//Pega data atual
    			String teste = String.valueOf(sdf.format(dtAtual));
    			auxData = sdf.parse(teste);
    			gc.setTime(auxData);
    			
    			int diaSemanaDt = gc.get(Calendar.DAY_OF_WEEK);
    			
    			if(diasSemAtendidos.contains(diaSemanaDt))
    			{	
    				
	    			if(periodos.toString().contains("0"))
	    			{
	    				horas = 8;
	    				varTime.setHours(horas);
	    				gc.setTime(varTime);
	    				
	    				for(int peridoM = 0; peridoM < 5 ; peridoM++ )
	    				{
	    					String contHoras = sdh.format(gc.getTime());
	    					boolean vagaOcupada = false;
	    					
	    					for(int registros =0; registros<vagasOcupadasEdit.size(); registros++)
	    					{
	    					
		    					if(vagasOcupadasEdit.get(registros).getHora().toString().equals(contHoras) &&
		    							auxData.equals(vagasOcupadasEdit.get(registros).getDtConsult()))
		    					{
		    						System.out.println("NAO TEMMMMMMMMMMMMM dia: " +sd.format(dtAtual) + " as "+contHoras);
		    						vagaOcupada = true;
		    						consultasMarcadas.add(vagasOcupadasEdit.get(registros));
		    						vagasOcupadasEdit.remove(registros);
		    						break;
		    					}
	    					}
	    					if(!vagaOcupada)
	    					{
	    						consulta = new Consulta();
	    						System.out.println("TEM VAGA dia: " +sd.format(dtAtual) + " as "+contHoras);
	    						consulta.setDtConsult(auxData);
	    						consulta.setHora(new java.sql.Time(sdh.parse(contHoras).getTime()));
	    						consulta.setMedico_crm(medicoCrm);
	    						consultasLivres.add(consulta);
	    					}
	    					
	    					gc.add(Calendar.HOUR,1);
	    				}
	    			}
	    			if(periodos.toString().contains("1"))
	    			{
	    				horas = 13;
	    				varTime.setHours(horas);
	    				gc.setTime(varTime);
	    				
	    				for(int peridoM = 0; peridoM < 6 ; peridoM++ )
	    				{
	    					String contHoras = sdh.format(gc.getTime());
	    					boolean vagaOcupada = false;
	    					
	    					for(int registros =0; registros<vagasOcupadasEdit.size(); registros++)
	    					{
	    					
		    					if(vagasOcupadasEdit.get(registros).getHora().toString().equals(contHoras) &&
		    							auxData.equals(vagasOcupadasEdit.get(registros).getDtConsult()))
		    					{
		    						System.out.println("NAO TEMMMMMMMMMMMMM dia: " +sd.format(dtAtual) + " as "+contHoras);
		    						vagaOcupada = true;
		    						consultasMarcadas.add(vagasOcupadasEdit.get(registros));
		    						vagasOcupadasEdit.remove(registros);
		    						break;
		    					}
	    					}
	    					if(!vagaOcupada)
	    					{
	    						System.out.println("TEM VAGA dia: " +sd.format(dtAtual) + " as "+contHoras);
	    						consulta.setDtConsult(auxData);
	    						consulta.setHora(varTime);
	    						consultasLivres.add(consulta);
	    					}
	    					
	    					gc.add(Calendar.HOUR,1);
	    				}
	    			}
	    			
	    			if(periodos.toString().contains("2"))
	    			{
	    				horas = 18;
	    				varTime.setHours(horas);
	    				gc.setTime(varTime);
	    				
	    				for(int peridoM = 0; peridoM < 2 ; peridoM++ )
	    				{
	    					String contHoras = sdh.format(gc.getTime());
	    					boolean vagaOcupada = false;
	    					
	    					for(int registros =0; registros<vagasOcupadasEdit.size(); registros++)
	    					{
	    					
		    					if(vagasOcupadasEdit.get(registros).getHora().toString().equals(contHoras) &&
		    							auxData.equals(vagasOcupadasEdit.get(registros).getDtConsult()))
		    					{
		    						System.out.println("NAO TEMMMMMMMMMMMMM dia: " +sd.format(dtAtual) + " as "+contHoras);
		    						vagaOcupada = true;
		    						consultasMarcadas.add(vagasOcupadasEdit.get(registros));
		    						vagasOcupadasEdit.remove(registros);
		    						break;
		    					}
//		    					else
//		    						System.out.println("TEM VAGA dia: " +sd.format(dtAtual) + " as "+contHoras);
	    					}
	    					if(!vagaOcupada)
	    					{
	    						System.out.println("TEM VAGA dia: " +sd.format(dtAtual) + " as "+contHoras);
	    						consulta.setDtConsult(auxData);
	    						consulta.setHora(varTime);
	    						consultasLivres.add(consulta);
	    					}
	    					
	    					gc.add(Calendar.HOUR,1);
	    				}
	    			}
    			}
    			
    		dtAtual.setDate(dtAtual.getDate()+1);
    	}
    	return consultasMarcadas;
    }
    
    public String montaPeriodo(String periodo)
    {
    	String aux="";
    	if(periodo.contains("0"))
    	{
    		if(periodo.contains("1"))
    		{
    			if(periodo.contains("2"))
    				return aux = "'"+"08:00:00"+"'"+ " and "+ "'"+"20:00:00"+"'";//0,1,2
    			else
    				return aux = "'"+"08:00:00"+"'"+ " and "+ "'"+"18:00:00"+"'";//0,1
    				
    		}
    		
    		else if(periodo.contains("2"))
    			return aux =  "'"+"08:00:00"+"'"+ " and "+ "'"+"12:00:00"+"'"+" or hora between " + "'"+"18:01:00"+"'"+" and "+"'"+"20:00:00"+"'";//0,2
    		
    		else
    			return  aux =  "'"+"08:00:00"+"'"+ " and "+ "'"+"12:00:00"+"'";//0
    	}
    	
    	else if(periodo.contains("1"))
    	{
    		
    		if(periodo.contains("2"))
    			return aux =  "'"+"12:01:00"+"'"+ " and "+ "'"+"20:00:00"+"'";//1,2
    		else
    			return aux =  "'"+"12:01:00"+"'"+ " and "+ "'"+"18:00:00"+"'";//1
    	}
    	else
    	return aux =  "'"+"18:01:00"+"'"+ " and "+ "'"+"20:00:00"+"'";//2
    }
    
    
    public void verificaPeriodos(List<Agenda_med> findHorarios)
    {
    	String segunda ="";
    	String terca ="";
    	String quarta ="";
    	String quinta ="";
    	String sexta ="";
    	String sabado ="";
    	diasSemAtendidos = new ArrayList<Integer>();
    	
    	
    	for(int x = 0; x< findHorarios.size(); x++)
    	{
    		if(findHorarios.get(x).getDiaSemana() == 2)
    		{
    			segunda += findHorarios.get(x).getPeriodo()+"- ";
    			diasSemAtendidos.add(findHorarios.get(x).getDiaSemana());
    		}
    		if(findHorarios.get(x).getDiaSemana() == 3)
    		{
    			terca += findHorarios.get(x).getPeriodo()+"- ";
    			diasSemAtendidos.add(findHorarios.get(x).getDiaSemana());
    		}
    		if(findHorarios.get(x).getDiaSemana() == 4)
    		{
    			quarta += findHorarios.get(x).getPeriodo()+"- ";
    			diasSemAtendidos.add(findHorarios.get(x).getDiaSemana());
    		}
    		if(findHorarios.get(x).getDiaSemana() == 5)
    		{
    			quinta += findHorarios.get(x).getPeriodo()+"- ";
    			diasSemAtendidos.add(findHorarios.get(x).getDiaSemana());
    		}
    		if(findHorarios.get(x).getDiaSemana() == 6)
    		{
    			sexta += findHorarios.get(x).getPeriodo()+"- ";
    			diasSemAtendidos.add(findHorarios.get(x).getDiaSemana());
    		}
    		if(findHorarios.get(x).getDiaSemana() == 7)
    		{
    			sabado += findHorarios.get(x).getPeriodo()+"- ";
    			diasSemAtendidos.add(findHorarios.get(x).getDiaSemana());
    		}
    	}
    	
    	diasPeriodos = new ArrayList<String>();
    	
    	diasPeriodos.add(segunda);
    	diasPeriodos.add(terca);
    	diasPeriodos.add(quarta);
    	diasPeriodos.add(quinta);
    	diasPeriodos.add(sexta);
    	diasPeriodos.add(sabado);
    }
    
    public String verificarDiaSemana(int dia)
    {
    	String diaSemana="";
    	switch (dia) 
    	{
		case 1:
			diaSemana = "Domingo";
			break;
		case 2:
			diaSemana = "Segunda";
			break;
		case 3:
			diaSemana = "Ter�a";
			break;
		case 4:
			diaSemana = "Quarta";
			break;
		case 5:
			diaSemana = "Quinta";
			break;
		case 6:
			diaSemana = "Sexta";
			break;
		case 7:
			diaSemana = "Savado";
			break;

		}
    		
    	return diaSemana;
    }
    public List<Integer> incrementaDias(List<Integer> aCarregar)
    {
    	for(int x = aCarregar.size(); x < 7; x++)
    		aCarregar.add(9);
    	return aCarregar;
    }
    
    public List<Integer> incrementaPeriodo(List<Integer> aCarregar)
    {
    	for(int x = aCarregar.size(); x < 3; x++)
    		aCarregar.add(9);
    	return aCarregar;
    }
  
    public String tratarListBD(List lista)
    {
    	String auxLista = "";
    	for (int i =0; i<lista.size(); i++)
    	{
    		
    		if(i == lista.size()-1 )
    			auxLista += lista.get(i);
    		else
    		auxLista += lista.get(i)+", ";
    	}
    	return auxLista;
    }
    
    private void carregaUsuLista(List<Consulta> list) {  
        for(int i = 0 ; i < list.size() ; i++)  
        		listaUsuario.add(list.get(i));  
				
    }
    
    private void carregaMedLista(List<Consulta> list) {  
        for(int i = 0 ; i < list.size() ; i++)  
        	listaUsuario.add(list.get(i));  
    }
    
    public void incluirConsulta()
    {
    	FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
    	
		Consulta consultaAtual = cm.BuscarConsultaAtual(id, this.getTcodPaciente());
		
		consultaAtual.setDadosConsult(this.gettConsulta());
    	String x = pm.incluirConsulta(consultaAtual);    	
    	
    	if(x=="ok"){
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Sucesso", "Dados incluidos com sucesso!"));
    	}else{
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Aten�‹o", "Erro ao incluir dados, Favor tentar novamente."));
    		
    	}

    }
  
    public void confirmarConsulta()
    {
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
		
		selectedCons.setPaciente(id);
    	
    	String x = consultaModel.inserirConsulta(selectedCons);
    	if (x=="ok"){
    		ic.consultaAgendada();
    	}
    }
    
    
    public void confirDesmConsulta()
    {
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
		
		selectedCons.setPaciente(id);
    	
    	if(consultaModel.desmarcarConsulta(selectedCons))
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Aten�‹o", "Consulta Desmarcada com Sucesso!"));
    	else
    		FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,"Aten�‹o", "Erro ao desmarcar consulta, Favor tentar novamente."));
    		
    }
  
    
    public String voltar()
    {
    	return "voltar";
    }
    
    public String voltarDesmarcar()
    {
    	return "voltarDesmarcar";
	}
    public String agendarConsulta()
    {
    	return "inserirConsulta";
    }
    public String desmarcarConsulta()
    {
		FacesContext contexto = FacesContext.getCurrentInstance();
		HttpSession sessao = (HttpSession) contexto.getExternalContext().getSession(false);
		
		Integer id = (Integer)sessao.getAttribute("idU");
    	
    	listaDesmCon = new ArrayList<ListaConsulta>();
    	
    	listaDesmCon = montarListaTela(pm.listaConsMarcadas(id));
    	
    	return "desmarcarConsulta";
    }

    public String desmarcarConsultaMed()
    {
    	return "desmarcarConsultaMed";
    }

    public String gettPesquisa() {
		return tPesquisa;
	}

	public void settPesquisa(String tPesquisa) {
		this.tPesquisa = tPesquisa;
	}

	public String gettEspecialidade() {
		return tEspecialidade;
	}

	public void settEspecialidade(String tEspecialidade) {
		this.tEspecialidade = tEspecialidade;
	}

	public String gettClinica() {
		return tClinica;
	}

	public void settClinica(String tClinica) {
		this.tClinica = tClinica;
	}

	public int gettMedico() {
		return tMedico;
	}

	public void settMedico(int tMedico) {
		this.tMedico = tMedico;
	}

	public List<Consulta> getListaUsuario() {
		return listaUsuario;
	}

	public void setListaUsuario(List<Consulta> listaUsuario) {
		this.listaUsuario = (ArrayList<Consulta>) listaUsuario;
	}


	public Medico getSelectedMed() {
		return selectedMed;
	}

	public void setSelectedMed(Medico selectedMed) {
		this.selectedMed = selectedMed;
	}


	public List<Integer> gettPeriodo() {
		return tPeriodo;
	}

	public void settPeriodo(List<Integer> tPeriodo) {
		this.tPeriodo = tPeriodo;
	}

	public List<Integer> gettDiasSemana() {
		return tDiasSemana;
	}

	public void settDiasSemana(List<Integer> tDiasSemana) {
		this.tDiasSemana = tDiasSemana;
	}

	public String gettConsulta() {
		return tConsulta;
	}

	public void settConsulta(String tConsulta) {
		this.tConsulta = tConsulta;
	}

	public int getTcodPaciente() {
		return tcodPaciente;
	}

	public void setTcodPaciente(int tcodPaciente) {
		this.tcodPaciente = tcodPaciente;
	}

	public void settData(String tData) {
		this.tData = tData;
	}

	public String gettData() {
		return tData;
	}

	public List<Usuario> getRetornoUsu() {
		return retornoUsu;
	}

	public void setRetornoUsu(List<Usuario> retornoUsu) {
		this.retornoUsu = retornoUsu;
	}

	public ListaConsulta getSelectedCons() {
		return selectedCons;
	}

	public void setSelectedCons(ListaConsulta selectedCons) {
		this.selectedCons = selectedCons;
	}

	public String gettNomeMedico() {
		return tNomeMedico;
	}

	public void settNomeMedico(String tNomeMedico) {
		this.tNomeMedico = tNomeMedico;
	}

	public List<Medico> gettListaMedico() {
		return tListaMedico;
	}

	public void settListaMedico(List<Medico> tListaMedico) {
		this.tListaMedico = tListaMedico;
	}

	public List<ListaConsulta> getListaDesmCon() {
		return listaDesmCon;
	}

	public void setListaDesmCon(List<ListaConsulta> listaDesmCon) {
		this.listaDesmCon = listaDesmCon;
	}

	public void settPaciente(int tPaciente) {
		this.tPaciente = tPaciente;
	}

	public int gettPaciente() {
		return tPaciente;
	}

	public List<Usuario> gettListaPaciente() {
		return tListaPaciente;
	}

	public void settListaPaciente(List<Usuario> tListaPaciente) {
		this.tListaPaciente = tListaPaciente;
	}

	public void settDtFolga(Date tDtFolga) {
		this.tDtFolga = tDtFolga;
	}

	public Date gettDtFolga() {
		return tDtFolga;
	}

	public void settTime(String tTime) {
		this.tTime = tTime;
	}

	public String gettTime() {
		return tTime;
	}

	public void settDate(String tDate) {
		this.tDate = tDate;
	}

	public String gettDate() {
		return tDate;
	}

	public void settCrm(int tCrm) {
		this.tCrm = tCrm;
	}

	public int gettCrm() {
		return tCrm;
	}

	public void settNomePaciente(String tNomePaciente) {
		this.tNomePaciente = tNomePaciente;
	}

	public String gettNomePaciente() {
		return tNomePaciente;
	}

	public List<Consulta> getHistConsultaPac() {
		return histConsultaPac;
	}

	public void setHistConsultaPac(List<Consulta> histConsultaPac) {
		this.histConsultaPac = histConsultaPac;
	}

  
}
